﻿Imports Lourdes.BackEnd.View
Imports Lourdes.BackEnd.BC
Imports Lourdes.BackEnd.Modelo
Imports Infragistics.Win.UltraWinGrid

Public Class frmNumerosDeSerie

  Private _vProductos As vLstProductos
  Public Sub New(pProductos As vLstProductos)

    ' Llamada necesaria para el diseñador.
    InitializeComponent()
    ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
    _vProductos = pProductos


  End Sub

  Private Sub frmNumerosDeSerie_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    CargarControles()
  End Sub

  Private Sub CargarControles()
    With grdLineasDocumento
      .DataSource = _vProductos
      .DataBind()
      .DisplayLayout.Rows(0).Selected = True
    End With

  End Sub

  Private Sub grdLineasDocumento_AfterSelectChange(sender As System.Object, e As Infragistics.Win.UltraWinGrid.AfterSelectChangeEventArgs) Handles grdLineasDocumento.AfterSelectChange

    RecargarGridDisponibles()
  End Sub

  Private Sub btnAgregar_Click(sender As System.Object, e As System.EventArgs) Handles btnAgregar.Click
    Dim NroSerieSel As MercaderiaNrosDeSerie
    Dim ProductoSel As vProducto = Nothing

    ProductoSel = GetProductoSeleccionado()

    If ProductoSel IsNot Nothing Then
      With grdNrosSerieDisponibles
        If .Selected.Rows.Count > 0 Then
          For Each rowSelected In .Selected.Rows
            NroSerieSel = CType(rowSelected.ListObject(), MercaderiaNrosDeSerie)
            If ProductoSel.NrosDeSerie.Count < ProductoSel.Cantidad Then
              ProductoSel.NrosDeSerie.Add(NroSerieSel)
            End If
          Next
        End If
      End With

      '    grdLineasDocumento.Refresh()
      CargarGrillaNrosSerieSeleccionados(ProductoSel)
      CleanSelectedRows(grdNrosSerieDisponibles, ProductoSel)
    End If
  End Sub

  Private Sub CleanSelectedRows(pGrid As UltraGrid, pProductoSeleccionado As vProducto)


    Dim NrosSerieAEliminar As New List(Of MercaderiaNrosDeSerie)
    With pGrid
      If pGrid.Name = "grdNrosSerieSeleccionados" Then
        If .Selected.Rows.Count > 0 Then
          For Each rowSelected In .Selected.Rows
            NrosSerieAEliminar.Add(CType(rowSelected.ListObject(), MercaderiaNrosDeSerie))           
          Next
          For Each NroSerieSel As MercaderiaNrosDeSerie In NrosSerieAEliminar
            pProductoSeleccionado.NrosDeSerie.Remove(NroSerieSel)
          Next
        End If
      End If

      RecargarGridDisponibles()

      SetColumnCantidadNrosSerie(grdNrosSerieDisponibles)
      '  SetColumnCantidadNrosSerie(grdNrosSerieSeleccionados)

      '  grdLineasDocumento.Refresh()
    End With
  End Sub

  Private Sub RecargarGridDisponibles()
    Dim ProductoSel As vProducto = Nothing
    Dim objMerNroSerie_BC As New BC_MercaderiaNrosDeSerie

    With grdLineasDocumento
      If .Selected.Rows.Count > 0 Then
        cleanGridNrosDeSerie(grdNrosSerieDisponibles)
        cleanGridNrosDeSerie(grdNrosSerieSeleccionados)

        ProductoSel = GetProductoSeleccionado()
        With ProductoSel
          grpNrosSerieDisponibles.Text = "Números de Serie Disponibles - " & .Nombre
          grpNrosSerieSeleccionados.Text = "Números de Serie Seleccionados - " & .Nombre
        End With
        CargarGrillaNrosSerieDisponibles(ProductoSel)
        CargarGrillaNrosSerieSeleccionados(ProductoSel)

        SetColumnCantidadNrosSerie(grdNrosSerieDisponibles)
        '  SetColumnCantidadNrosSerie(grdNrosSerieSeleccionados)
        SetearBotones()
      End If
    End With
  End Sub

  Private Sub SetearBotones()
    If grdNrosSerieSeleccionados.Rows.Count = 0 Then
      btnQuitar.Enabled = False
      btnAgregar.Enabled = True
    Else
      If GetProductoSeleccionado().Cantidad < grdNrosSerieSeleccionados.Rows.Count Then
        btnAgregar.Enabled = True
      Else
        btnAgregar.Enabled = False
      End If
      btnQuitar.Enabled = True
    End If
  End Sub

  Private Sub CargarGrillaNrosSerieDisponibles(pProductoSel As vProducto)
    With pProductoSel
      grdNrosSerieDisponibles.DataSource = (New BC_MercaderiaNrosDeSerie).getByFilters(.MercaderiaId, txtNroSerie.Text, .NrosDeSerie)
    End With
    grdNrosSerieDisponibles.DataBind()
    If grdNrosSerieDisponibles.Rows.Count > 0 Then
      grdNrosSerieDisponibles.Rows(0).Selected = True
    End If
  End Sub

  Private Sub CargarGrillaNrosSerieSeleccionados(pProductosel As vProducto)
    If pProductosel.NrosDeSerie.Count > 0 Then
      grdNrosSerieSeleccionados.DataSource = pProductosel.NrosDeSerie
      grdNrosSerieSeleccionados.DataBind()
      grdNrosSerieSeleccionados.Rows(0).Selected = True
    End If
  End Sub

  Private Sub btnQuitar_Click(sender As Object, e As System.EventArgs) Handles btnQuitar.Click

    CleanSelectedRows(grdNrosSerieSeleccionados, GetProductoSeleccionado)

    'RecargarGridDisponibles()
  End Sub

  Private Sub cleanGridNrosDeSerie(pGrid As UltraGrid)
    With pGrid
      .DataSource = New List(Of MercaderiaNrosDeSerie)
      .DataBind()
    End With

  End Sub

  Private Sub SetColumnCantidadNrosSerie(pGrid As UltraGrid)
    grdLineasDocumento.Refresh()
    For Each orow As UltraGridRow In grdLineasDocumento.Rows
      With orow
        .Cells("TotalSeleccionado").Value = _vProductos(orow.Index).NrosDeSerie.Count
      End With
    Next
  End Sub

  Private Function GetProductoSeleccionado() As vProducto
    Dim ProductoSel As vProducto = Nothing
    Dim rowSelected As UltraGridRow

    With grdLineasDocumento
      If .Selected.Rows.Count > 0 Then
        For Each rowSelected In .Selected.Rows
          ProductoSel = CType(rowSelected.ListObject(), vProducto)
        Next
      End If
    End With

    Return ProductoSel
  End Function

  Private Sub txtNroSerie_AfterExitEditMode(sender As System.Object, e As System.EventArgs) Handles txtNroSerie.AfterExitEditMode
    RecargarGridDisponibles()
  End Sub

  Private Sub btnCancelar_Click(sender As System.Object, e As System.EventArgs) Handles btnCancelar.Click
    If MsgBox("¿Desea salir de la selección de números de serie?", vbYesNo, "Salir de Selección de Números de Serie") = vbYes Then
      LimpiarListasSeleccionados()
      Me.Dispose()
      Me.Close()

    End If
  End Sub

  Private Sub LimpiarListasSeleccionados()
    For Each oProducto In _vProductos
      oProducto.NrosDeSerie = New List(Of MercaderiaNrosDeSerie)
    Next
  End Sub

  Private Sub frmNumerosDeSerie_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    If Keys.Escape = e.KeyCode And btnCancelar.Enabled = True Then
      btnCancelar_Click(Nothing, Nothing)
    ElseIf Keys.F2 And btnGuardar.Enabled Then
      btnGuardar_Click(Nothing, Nothing)
    End If
  End Sub

  Private Sub btnGuardar_Click(sender As System.Object, e As System.EventArgs) Handles btnGuardar.Click
    If Not NumerosDeSerieSinAsignar() Then
      '  UcStatusBar1.MostrarMensajeVerde("Números de serie asignados a los productos de la factura.")
      DirectCast(Me.Owner, frmFactura).GuardarFactura(_vProductos)

      Me.Dispose()
      Me.Close()
    Else
      UcStatusBar1.MostrarMensajeRojo("Hay productos a los aún que se deben asignar números de serie.")
    End If
  End Sub
  Private Function NumerosDeSerieSinAsignar() As Boolean
    For Each oProducto As vProducto In _vProductos
      With oProducto
        If .Cantidad > .NrosDeSerie.Count Then
          Return True
        End If
      End With
    Next
    Return False
  End Function

  Private Sub grdLineasDocumento_ClickCell(sender As System.Object, e As Infragistics.Win.UltraWinGrid.ClickCellEventArgs) Handles grdLineasDocumento.ClickCell
    e.Cell.Row.Selected = True
    RecargarGridDisponibles()
  End Sub
End Class